<?php
/* *
 * 功能：微信服务器异步通知页面
 * 版本：3.3
 * 日期：2012-07-23
 * 说明：
 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 * 该代码仅供学习和研究微信接口使用，只是提供一个参考。


 *************************页面功能说明*************************
 * 创建该页面文件时，请留心该页面文件中无任何HTML代码及空格。
 * 该页面不能在本机电脑测试，请到服务器上做测试。请确保外部可以访问该页面。
 * 该页面调试工具请使用写文本函数logResult，该函数已被默认关闭，见alipay_notify_class.php中的函数verifyNotify
 * 如果没有收到该页面返回的 success 信息，微信会在24小时内按一定的时间策略重发通知
 */
define('ROOT_PATH', substr(dirname(__FILE__),0,strlen(dirname(__FILE__))-strlen('service')-1));
include(ROOT_PATH . '/eccore/ecmall.php');
require(ROOT_PATH . '/eccore/model/model.base.php');   //模型基础类

/* 定义配置信息 */
ecm_define(ROOT_PATH . '/data/config.inc.php');
ecm_define(ROOT_PATH . '/data/settings.inc.php');
/* 环境 */
define('CHARSET', substr(LANG, 3));
include_once 'mobilecommon.php';
include_once 'MessageService.php';
include_once 'WxPayPubHelper.php';
include_once 'log_.php';
$notify = new Notify_pub();
$log_ = new Log_();

//var_dump($notify);
//存储微信的回调
$xml = empty($GLOBALS["HTTP_RAW_POST_DATA"]) ?"":  $GLOBALS["HTTP_RAW_POST_DATA"];
if($xml){
	$notify->saveData($xml);


	//验证签名，并回应微信。
	//对后台通知交互时，如果微信收到商户的应答不是成功或超时，微信认为通知失败，
	//微信会通过一定的策略（如30分钟共8次）定期重新发起通知，
	//尽可能提高通知的成功率，但微信不保证通知最终能成功。
	if($notify->checkSign() == FALSE){
		$notify->setReturnParameter("return_code","FAIL");//返回状态码
		$notify->setReturnParameter("return_msg","签名失败");//返回信息
	}else{
		$notify->setReturnParameter("return_code","SUCCESS");//设置返回码
	}
	$returnXml = $notify->returnXml();
	echo $returnXml;


	$log_name="notify_url.log";//log文件路径
	$log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
	if($notify->checkSign() == TRUE)
	{
		if ($notify->data["return_code"] == "FAIL") {
			//此处应该更新一下订单状态，商户自行增删操作
			$log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
		}
		elseif($notify->data["result_code"] == "FAIL"){
			//此处应该更新一下订单状态，商户自行增删操作
			$log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
		}
		else{
			$order = $notify->getData();
			$log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
			$out_trade_no = $order["out_trade_no"];
			$total_fee=$order["total_fee"];
			$trade_no=$order["transaction_id"];

			order_wx_pay($out_trade_no,$total_fee/100,$trade_no);
		}

		//商户自行增加处理流程,
		//例如：更新订单状态
		//例如：数据库操作
		//例如：推送支付完成信息
	}
}else{
	$notify->setReturnParameter("return_code","FAIL");//返回状态码
	$notify->setReturnParameter("return_msg","参数错误");//返回信息
	$returnXml = $notify->returnXml();
	echo $returnXml;
}

function order_wx_pay($out_trade_no,$total_fee,$trade_no){
	$db=&db();
	$orderself=array();
	$sql="select * from cw_order where order_sn='".$out_trade_no."'";

	$orderself=$order->db->getRow($sql);

	$o_tid=$orderself['order_id'];

	if(empty($orderself)){

		echo "success";
		exit();
	}
	if($orderself['status']!=11){
		echo "success";
		exit();
	}
	$list=$orderself;

	$sql="select * from cw_payment where enabled=1 and payment_id='微信'";
	$payment=$db->getRow($sql);

	if($payment){
		$sql="update cw_order set status='20',payment_name='".$payment['payment_name']."',payment_id='".$payment['payment_id']."',
			payment_code='".$payment['payment_code']."',out_trade_sn='".$trade_no."',pay_time='".gmtime()."'where order_id=".$o_tid;
		$db->query($sql);

		if($db->affected_rows()){
			order_progress($o_tid,'待付款','已付款',$list['buyer_id'],'用户已经支付订单');
		}
	}
}
?>